<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    //利用构造函数创建对象
    //创建需要创建四大天王的对象  相同的属性：名字 年龄 性别  相同的方法： 唱歌
    //构造函数的语法格式
    // function 构造函数名() {
    //this是当前的意思
    //     this.属性 = 值；
    //     this.方法 = function () {
    //     }
    // }
    //调用构造函数的方法
    // new 构造函数名（）;


    //1构造函数的名字首字母要大写
    //2.构造函数不需要return，就可以返回结果
    //3.调用构造函数需要使用new
    //4.只要new star() 调用函数就创建一个对象 ldh{}
    //5.属性和方法前面一定要添加 this
    function Star(name,age,sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sing = function (sang) {
            console.log(sang)
        }
    }
    //调用函数返回的是一个对象
    let ldh =  new Star('刘德华',18,'男');
    console.log(ldh.name);
    console.log(ldh['age']);
    ldh.sing('十七岁');
    let zxy = new Star('张学友',19,'男');
    console.log(zxy.name);
    console.log(zxy.sex);
    zxy.sing('遥远的她');


    //构造函数和对象
    //1.构造函数 , 明星 泛指的某一大类
    function Star(name,age,sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sing = function (sang) {
            console.log(sang)
        }
    }
    //2.对象  特指某一个 是一个具体的事物 刘德华 == name: "刘德华", age: "17", sex: "男", sing: ƒ
    let ldh = new Star('刘德华','17','男');//调用函数返回一个对象
    console.log(ldh)
    //3.我们利用构造函数创建的对象的过程我们也称为对象的实例化

    function hero(name,type,blood) {
        this.name = name;
        this.type = type;
        this.blood = blood;
        this.attack = function (att) {
            console.log(att)
        }
    }
    let houyi = new hero('后羿','射手型','100血量');
    console.log(houyi.name);
    console.log(houyi.type);
    console.log(houyi.blood);
    houyi.attack('远程');

    let lianpo = new hero('廉颇','力量型','500血量')
    console.log(lianpo.name);
    console.log(lianpo.type);
    console.log(lianpo.blood);
    lianpo.attack('近战');

    //new关键字执行过程
    //1.new构造函数可以在内存中创建了一个空的对象
    //2. this 就会指向刚才创建的空对象
    //3. 执行构造函数里面的代码 给这个空对象添加属性和方法
    //4.返回这个对象 （所以构造函数不需要return）
    function Star(name,age,sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sing = function (sang) {
            console.log(sang)
        }
    }
    let ldh =  new Star('刘德华',18,'男');

    //遍历对象
    let obj = {
        name:'兰',
        age:18,
        sex:'男',
        fn:function () {

        }
    };
    // for in 遍历对象
    // for(变量 in 对象){
    //
    // }
    for (let k in obj){
        console.log(k);// i 变量 输出 得到的是 属性名
        console.log(obj[k]);// obj[i] 得到是 属性值
    }
    //使用 for in 里面的变量 写 k 或者 key (没有强制)

    /*1.对象可以让代码结构更清晰
    *2.对象复杂数据类型object
    * 3. 本质：对象是一组无序的相关属性和方法的集合
    * 4.构造函数泛指某一大类，比如苹果，不管是红色苹果还是绿色苹果，都统称为苹果。
    * 5.对象实例特指一个事物，比如这个苹果，正在唱歌
    * 6.for..in 语句用于对对象的属性进行循环操作
    *
    *
    *  */
</script>
</html>